LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

游戏引擎架构精要(才怪)①

2022/3/1

《Game Engine Architecture》是一直以来我很有兴趣也很想阅读的书,书的译者是我很敬重的milo叶劲峰前辈(魔方引擎中心的大大)。

但是由于自己基础不牢,再加上这本厚厚的大书所带来的畏难情绪,同时自己过于功利总是把时间抽去做容易提升的事情,

以及n个自己给自己找的理由,让这个阅读计划一直搁置。

但这学期拿到了暑期实习的offer,刚巧也在魔方,对于就业的压力就减小了很多

再加上自己有意往引擎方向发展,阅读这本书就提上了日程。

既然它这么厚,那囫囵吞枣看完就忘肯定都是不行的,所以还是写点东西记一下吧

之前有粗读一下这本书,书的内容是复杂,综合,全面的,每个章节都涵盖了大量的内容

以目前的能力没法很好的概括提及,没有像之前记录《游戏编程模式》那样有固定的写作框架

所以这篇博客的形式可能还是更倾向读书笔记而非对他人有意义的知识总结

所以现在这些废话基本上是写给自己看的hhh


第一章 基础

导论,游戏介绍,不同游戏类型所使用的引擎差异,游戏引擎概述,没什么好说的,工具及资产管道,略

img

第一章里面感觉这张图既经典又重要,丢一篇米忽悠大佬的文

从零手写游戏引擎2:引擎架构概述 - 知乎 (zhihu.com)

大佬评价这本书游戏开发领域尤其是客户端开发必看书籍,也是一本偏入门和科普性质的书籍。

看来这个入门还是让我蛮吃力的hhh。


第二章 专业工具

2.1 版本控制

git,会用就行,命令行要用再查,略

2.2 visual studio常见功能

生成配置

image-20220301203453167

可以在生成配置里面设定不同的预处理器,编译器,链接器属性

预处理器设置处理#include文件的展开,以及处理#define宏的定义和替换

编译器设置控制产生的对象文件是否包含调试信息,是最常见的编译选项之一,也可以控制是否展开内联函数。

链接器设置指定将哪些外部库链接到可执行文件,以及搜索路径

一般项目自带”调试(debug)“和”发布(release)“配置。

常规属性页设置

随便打开一个项目的属性就能进入常规属性设置页面,里面有输出目录,中间目录各种目录的说明。

调试代码

我一直觉得调试代码是很重要的功能,希望可以借着记录要点和操作慢慢理解增进

  • 一个解决方案可能包含多个项目,记得正确设置启动项目。

  • 断点(breakpoint)是代码调试的基本所需,能让代码停下观察此刻的运行状态。

  • F5 开始调试,F10 逐过程运行(不进入函数调用),F11 逐语句运行(进入函数调用)

image-20220301210551736

image-20220301210657028

运行中可以如图所示调出许多窗口用于观察变量或者变量地址,函数堆栈情况。

其中监视窗口是个很有意思的功能,有机会可以多多尝试。

数据断点也是个很有用的功能,可以在指定地址或者被写入时引发一个中断

(vs2022没有找到条件断点,但找到了函数断点)

image-20220301211906610

2.3 剖析工具

剖析器(profiler)可以度量代码的执行时间,并能告知每个函数所花的时间。

  • 统计式剖析器:几乎不影响目标代码的执行速度,原理是周期为CPU的程序计数器寄存器进行采样。
  • 测控式剖析器:提供最详细最精确的计时数据,代码几乎跑不动。

第三章 游戏软件工程基础

3.1说的是cpp的语法以及cpp11的一些特性

3.2则聊了聊一些比较深的东西,例如多态和虚函数表,拷贝和移动语义,内存布局

这些内容早在背八股文的时候都记牢了也理解了,没有什么有意思的内容

3.3 捕捉和错误处理

错误分为用户错误和程序员错误,用户错误指用户做了不正确的事情引发的错误

例如无效键入,尝试打开不存在的文件,我们这里只讨论程序员错误。

程序员错误的处理应该以立即中止程序并提供调试信息为原则。

  • 错误返回码:当函数执行错误时返回一个不可能的值,最好可以返回一个枚举值。缺点是堆栈里的函数观察到错误时,其他函数都要添加代码。

  • 异常:可以检测错误函数,并把相关错误储存于某对象,缺点是异常处理会有一些额外的开销,一个函数使用了异常整个程序都得使用异常。

  • 断言:当表达式为假时,暂停程序打印错误信息。断言可以用宏实现,UE引擎则自带断言功能。

3.4说的是流水线,缓存以及优化,这些涉及到硬件架构的内容目前对我来说太硬核了,往后稍稍。


今天就到这里吧,第四章基本上都是三维数学相关的内容,里面矢量,矩阵,坐标系那些的内容也是基本上滚瓜烂熟了

第四章中比较感兴趣的是四元数,奈何今天看到的时候没看明白233333

2022.3.1 ——21:32